맨위로가기

메시지 전달 인터페이스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메시지 전달 인터페이스(MPI)는 병렬 컴퓨터에서 프로세스 간 통신을 위한 표준 프로그래밍 인터페이스이다. 1990년대 초 분산 메모리 병렬 컴퓨팅 환경의 표준화 필요성에 따라 개발되었으며, 1994년 버전 1.0이 출시되었다. MPI는 C, C++, Fortran을 위한 공식 바인딩을 제공하며, 다양한 프로그래밍 언어에서도 사용할 수 있다. MPI는 점대점 통신, 집합 통신, 파생 데이터 타입, 동적 프로세스 관리, 병렬 I/O 등의 기능을 제공하며, 고성능 컴퓨팅 분야에서 널리 사용되고 있다. 주요 구현체로는 MPICH, Open MPI, Intel MPI, Microsoft MPI 등이 있다. MPI는 엑사스케일 컴퓨팅 프로젝트에서도 활용되는 등, 지속적으로 발전하고 있으며, 고성능 컴퓨팅 분야에서 오랫동안 관련성을 유지할 것으로 예상된다.

더 읽어볼만한 페이지

  • 분산 컴퓨팅 - 클라우드 컴퓨팅
    클라우드 컴퓨팅은 인터넷을 통해 컴퓨팅 자원을 서비스 형태로 제공하는 모델로, 다양한 서비스 및 배치 모델을 가지며 비용 효율성과 확장성을 제공하지만 보안 및 의존성 문제도 존재하며 지속적으로 발전하고 있다.
  • 분산 컴퓨팅 - 그리드 컴퓨팅
    그리드 컴퓨팅은 지리적으로 분산된 컴퓨터 자원을 연결하여 가상 슈퍼컴퓨터를 구축하는 기술이며, 유휴 자원을 활용하고 과학 연구 등 다양한 분야에 활용된다.
  • 병렬 컴퓨팅 - 슈퍼컴퓨터
    슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다.
  • 병렬 컴퓨팅 - 컴퓨터 클러스터
    컴퓨터 클러스터는 여러 대의 상용 컴퓨터를 고속 네트워크로 연결하여 고성능 컴퓨팅 시스템을 구축하는 방식으로, 슈퍼컴퓨터를 포함한 다양한 분야에서 높은 가용성과 확장성을 제공하며, 클러스터 미들웨어를 통해 시스템 관리, 부하 분산, 통신 방식, 데이터 공유 등을 지원하고 노드 장애 관리를 위한 펜싱 기술을 활용한다.
  • API - Tk (소프트웨어)
    Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다.
  • API - ASIO
    ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다.
메시지 전달 인터페이스

2. 역사

메시지 전달 인터페이스(MPI)는 병렬 컴퓨팅 환경에서 프로세스 간 통신을 위한 표준이다. MPI는 1990년대 초 분산 메모리 시스템의 발전과 함께 여러 시스템 간의 호환성 문제를 해결하기 위해 개발되었다.

MPI는 병렬 하드웨어 공급업체가 효율적으로 구현할 수 있는 명확하게 정의된 기본 루틴 집합을 제공한다. 그 결과, 하드웨어 공급업체는 이 표준 저수준 프로그래밍 언어 루틴 모음을 기반으로 자사 병렬 컴퓨터에서 제공되는 분산 메모리 통신 환경을 위한 고수준 프로그래밍 언어 루틴을 만들 수 있다. MPI는 사용하기 쉬운 이식 가능한 인터페이스를 제공하며, 고급 컴퓨터에서 사용할 수 있는 고성능 메시지 전달 작업을 프로그래머가 사용할 수 있을 정도로 강력하다.

MPI는 IBM, 인텔, nCUBE, PVM, Express, P4 및 PARMACS 등 여러 시스템의 가장 유용한 기능을 통합했다. 메시지 전달 패러다임은 이식성이 뛰어나, 분산 메모리 및 공유 메모리 다중 프로세서, 워크스테이션 네트워크 및 이러한 요소의 조합에 대한 통신에 사용할 수 있다. 이 패러다임은 네트워크 속도나 메모리 아키텍처와 상관없이 여러 설정에 적용할 수 있다.

2. 1. MPI의 탄생 배경

1990년대 초, 분산 메모리 병렬 컴퓨팅 환경이 발전하면서, 서로 다른 시스템 간의 호환성과 이식성을 보장하는 표준화된 메시지 전달 인터페이스의 필요성이 대두되었다. 1991년 여름, 오스트리아에서 소규모 연구 그룹이 모여 관련 논의를 시작했다.[2] 이 논의는 1992년 4월 29일부터 30일까지 버지니아주 윌리엄스버그에서 열린 분산 메모리 환경에서의 메시지 전달 표준에 대한 워크숍으로 이어졌다.[2] 이 워크숍에서 참가자들은 표준 메시지 전달 인터페이스에 필수적인 기본 기능에 대해 논의하고 표준화 과정을 계속하기 위한 워킹 그룹을 구성했다.

잭 동가라, 토니 헤이, 데이비드 W. 워커는 1992년 11월에 "MPI-1"이라는 예비 초안을 제출했다.[3] 같은 해 11월, 미니애폴리스에서 MPI 워킹 그룹 회의가 열렸고, 표준화 과정을 보다 공식적으로 진행하기로 결정했다. MPI 워킹 그룹은 1993년 초 9개월 동안 6주마다 회의를 가졌다. 1993년 11월, 슈퍼컴퓨팅 컨퍼런스에서 MPI 표준 초안이 발표되었다.[3] 이후 공개 의견 수렴 기간을 거쳐 일부 내용이 수정되었고, 1994년 6월에 MPI 버전 1.0이 출시되었다.

MPI 포럼은 이러한 회의와 이메일 토론을 통해 구성되었으며, 고성능 컴퓨팅 커뮤니티의 모든 구성원에게 참여 기회가 열려 있었다. MPI 개발에는 미국과 유럽을 중심으로 약 40개 기관에서 80여 명이 참여했다. 병렬 컴퓨터 주요 공급업체 대부분이 MPI 개발에 참여했으며, 대학, 정부 연구소 및 민간 산업의 연구원들과 협력했다.

MPI는 IBM, 인텔, nCUBE, PVM, Express, P4 및 PARMACS 등 여러 시스템의 가장 유용한 기능을 통합하여 설계되었다. 메시지 전달 패러다임은 광범위한 이식성 덕분에 널리 사용되었으며, 분산 메모리 및 공유 메모리 다중 프로세서, 워크스테이션 네트워크, 그리고 이러한 요소들의 조합을 포함하는 다양한 환경에서 통신에 활용될 수 있다.

MPI 회의는 방위고등연구계획국(DARPA), 미국 국립 과학 재단(NSF)의 보조금 ASC-9310330, NSF 과학 기술 센터 협력 계약 번호 CCR-8809615, 그리고 유럽 위원회의 Esprit 프로젝트 P6643을 통해 지원받았다. 테네시 대학교도 MPI 포럼에 재정적으로 기여했다.

2. 2. MPI 포럼과 표준 제정

1991년 여름, 오스트리아에서 소규모 연구 그룹이 메시지 전달 인터페이스에 대한 논의를 시작했다. 1992년 4월 29일부터 30일까지 버지니아주 윌리엄스버그에서 분산 메모리 환경에서의 메시지 전달 표준에 대한 워크숍이 개최되었고,[2] 여기서 표준화 과정을 위한 워킹 그룹이 구성되었다. 잭 동가라, 토니 헤이, 데이비드 W. 워커는 1992년 11월에 "MPI1"이라는 예비 초안을 제출했다.

1992년 11월, 미니애폴리스에서 MPI 워킹 그룹 회의가 개최되어 표준화 과정을 공식화했다. MPI 워킹 그룹은 1993년 초 9개월 동안 6주마다 회의를 가졌다. 1993년 11월 슈퍼컴퓨팅 '93 컨퍼런스에서 MPI 표준 초안이 발표되었고,[3] 공개 의견 수렴 기간을 거쳐 1994년 6월 MPI 1.0 버전이 출시되었다. 이러한 회의와 이메일 토론을 통해 MPI 포럼이 구성되었으며, 고성능 컴퓨팅 커뮤니티의 모든 구성원에게 참여 기회가 열려 있었다.

MPI 포럼에는 미국과 유럽을 중심으로 약 40개 기관, 80여 명의 연구자 및 개발자가 참여했다. 병렬 컴퓨터 주요 공급업체 대부분이 참여했으며, 대학, 정부 연구소, 민간 산업 연구원들과 협력했다.

MPI 개발에는 방위고등연구계획국(DARPA), 미국 국립 과학 재단(NSF), 유럽 위원회의 Esprit 프로젝트 P6643 등이 지원했으며, 테네시 대학교도 MPI 포럼에 재정적으로 기여했다.

2. 3. MPI의 발전과 확장

MPI 포럼은 1992년 버지니아주 윌리엄스버그에서 열린 워크숍에서 분산 메모리 환경에서의 메시지 전달 표준에 대한 논의를 시작으로, 잭 동가라, 토니 헤이, 데이비드 W. 워커가 1992년 11월에 "MPI1" 초안을 제출하면서 본격화되었다.[2] 1993년 11월 슈퍼컴퓨팅 '93 컨퍼런스에서 MPI 표준 초안이 발표되었고,[3] 공개 의견 수렴을 거쳐 1994년 6월 MPI 버전 1.0이 출시되었다.

MPI는 미국과 유럽을 중심으로 약 40개 기관, 80여 명이 참여한 국제적인 협력의 결과였다.[3] 병렬 컴퓨터 주요 공급업체, 대학, 정부 연구소, 민간 산업 연구원들이 참여하여, 효율적인 구현이 가능하고 이식성이 뛰어난 메시지 전달 표준을 만들었다.

MPI는 IBM, 인텔, nCUBE 등 다양한 시스템의 기능을 통합하여 설계되었으며, 분산 메모리 및 공유 메모리 다중 프로세서, 워크스테이션 네트워크 등 다양한 환경에서 사용할 수 있는 범용적인 표준을 지향했다.

MPI 회의는 방위고등연구계획국(DARPA), 미국 국립 과학 재단(NSF), 유럽 위원회의 Esprit 프로젝트, 테네시 대학교의 지원을 받아 진행되었다.

3. MPI의 주요 특징 및 개념

MPI는 병렬 컴퓨터 프로그래밍을 위한 통신 프로토콜로,[4] 포인트 투 포인트 통신과 집합 통신을 모두 지원한다. MPI는 "구현에서 해당 기능이 어떻게 동작해야 하는지에 대한 프로토콜 및 의미 사양과 함께 메시지 전달 응용 프로그래머 인터페이스"이다.[5] MPI의 목표는 고성능, 확장성 및 이식성이며, 오늘날 고성능 컴퓨팅에서 사용되는 지배적인 모델로 남아 있다.[6]

MPI는 주요 표준 기구에서 승인받지 않았지만, 분산 메모리 시스템에서 실행되는 병렬 프로그래밍을 모델링하는 프로세스 간의 통신에 대한 ''사실상'' 표준이 되었다. 컴퓨터 클러스터와 같은 실제 분산 메모리 슈퍼컴퓨터는 종종 이러한 프로그램을 실행한다.

주요 MPI-1 모델은 공유 메모리 개념이 없고, MPI-2는 제한적인 분산 공유 메모리 개념만 가지고 있다. 그럼에도 불구하고, MPI 프로그램은 공유 메모리 컴퓨터에서 정기적으로 실행되며, MPICH와 Open MPI는 사용 가능한 경우 메시지 전송에 공유 메모리를 사용할 수 있다.[7][8] MPI 모델을 중심으로 프로그램을 설계하는 것(명시적 공유 메모리 모델과 반대로)은 MPI가 메모리 지역성을 장려하기 때문에 NUMA 아키텍처에서 실행할 때 이점이 있다. 명시적 공유 메모리 프로그래밍은 MPI-3에서 도입되었다.[9][10][11]

MPI는 OSI 참조 모델의 레이어 5 이상에 속하지만, 구현은 대부분의 레이어를 포함할 수 있으며, 전송 계층에서 인터넷 소켓과 전송 제어 프로토콜 (TCP)이 사용된다.

대부분의 MPI 구현은 C, C++, Fortran (즉, API)에서 직접 호출할 수 있는 특정 루틴 집합과 C#, Java 또는 Python을 포함하여 이러한 라이브러리와 인터페이스할 수 있는 모든 언어로 구성된다. 이전 메시지 전달 라이브러리에 비해 MPI의 장점은 이식성과 속도이다.

MPI는 호출 및 언어 바인딩에 언어 독립적 사양 (LIS)을 사용한다. 첫 번째 MPI 표준은 LIS와 함께 ANSI C 및 Fortran-77 바인딩을 지정했다. 초안은 1994년 11월 슈퍼컴퓨팅 학회에서 발표되었으며, 곧 최종 확정되었다.[12] 2008년에 MPI-1 시리즈의 최종 종료로 출시된 MPI-1.3 표준은 약 128개의 함수로 구성된다.[13]

현재 표준에는 여러 버전이 있다.


  • MPI-1: 메시지 전달을 강조하고 정적 런타임 환경을 가진 버전 1.3
  • MPI-2: 병렬 I/O, 동적 프로세스 관리 및 원격 메모리 연산과 같은 새로운 기능을 포함하는 버전 2.2
  • MPI-3: 비차단 버전의 집합 연산에 대한 확장 및 단방향 연산에 대한 확장을 포함하는 버전 3.1[14][15]


MPI-2는 500개 이상의 함수를 지정하고 ISO C, ISO C++, Fortran 90에 대한 언어 바인딩을 제공하며, 객체 상호 운용성도 추가되어 혼합 언어 메시지 전달 프로그래밍을 더 쉽게 만들었다.

MPI-3.0은 집합 연산의 비차단 버전, 단방향 연산의 향상, Fortran 2008 바인딩을 포함하여 MPI 표준에 대한 상당한 업데이트를 도입하고, 더 이상 사용되지 않는 C++ 바인딩과 다양한 구식 루틴 및 객체를 제거한다.

MPI-3.1은 특히 Fortran 바인딩에 대한 수정 및 설명을 중심으로 하는 작은 업데이트이며, MPI-4.0은 많은 루틴의 대용량 버전, 영구 집합 연산, 분할 통신 및 새로운 MPI 초기화 방법을 도입하는 주요 업데이트이다. MPI-4.1은 MPI-4.0 표준에 대한 수정 및 설명을 중심으로 하는 작은 업데이트이다.

MPI는 1989년에 개발된 병렬 가상 머신 (PVM)과 비교되기도 한다.

3. 1. 통신자 (Communicator)

통신자(Communicator) 객체는 MPI 세션에서 프로세스 그룹을 연결한다. 각 통신자는 포함된 각 프로세스에 독립적인 식별자를 제공하고, 포함된 프로세스를 정렬된 토폴로지로 배열한다.[14] MPI는 명시적 그룹도 가지고 있지만, 이는 다른 통신자가 생성되기 전에 프로세스 그룹을 구성하고 재구성하는 데 주로 유용하다. MPI는 단일 그룹 내 통신자 연산과 양방향 간 통신자 통신을 지원한다. MPI-1에서는 단일 그룹 연산이 가장 널리 사용된다. 양방향 연산은 주로 집단 통신 및 동적 프로세스 내 관리를 포함하는 MPI-2에서 나타난다.[14]

통신자는 여러 MPI 명령을 사용하여 분할할 수 있다. 이러한 명령에는 `MPI_COMM_SPLIT`가 포함되며, 여기서 각 프로세스는 해당 색상을 선언하여 여러 색상 하위 통신자 중 하나에 참여한다.[14]

3. 2. 점대점 통신 (Point-to-point communication)

MPI는 프로세스 간의 통신을 위한 여러 함수를 제공하는데, 그 중 `MPI_Send` 함수는 한 프로세스가 다른 프로세스에 메시지를 보내는 데 사용된다. 이러한 방식을 점대점(point-to-point) 연산이라고 하며, 데이터 병렬 처리 아키텍처나 마스터-슬레이브 아키텍처 등에서 유용하게 활용된다.[17]

MPI-1은 블로킹 및 논블로킹 점대점 통신 메커니즘과 함께, 수신 요청이 이미 이루어진 경우에만 전송 요청을 허용하는 '레디-전송' 메커니즘도 지원한다.[17]

3. 3. 집합 통신 (Collective communication)

MPI는 프로세스 그룹 내의 모든 프로세스가 통신에 참여하는 집합 통신을 지원한다.[4] 집합 통신은 데이터를 효율적으로 교환하고 연산하는 데 사용된다. 예를 들어, `MPI_Bcast` 함수는 하나의 프로세스에서 그룹 내의 모든 프로세스로 데이터를 브로드캐스트하는 데 사용된다. `MPI_Reduce` 함수는 각 프로세스의 데이터를 결합하여 하나의 결과를 생성하는 데 사용된다. `MPI_Alltoall` 함수는 모든 프로세스가 서로에게 데이터를 보내는 전체 대 전체 통신을 수행한다.

MPI-3에서는 집합 연산의 비차단 버전이 도입되어 통신과 계산을 더 효율적으로 중첩할 수 있게 되었다.[14][15]

3. 4. 파생 데이터 타입 (Derived data types)

MPI는 이기종 환경을 지원하기 위해 기본 데이터 타입 외에 파생 데이터 타입을 제공한다.[16] 서로 다른 노드에서 유형이 다르게 표현될 수 있기 때문에, MPI 구현은 데이터 변환을 수행할 수 있다.[16] C 언어에서는 유형 자체를 매개변수로 전달할 수 없으므로, MPI는 `MPI_INT`, `MPI_CHAR`, `MPI_DOUBLE` 상수를 `int`, `char`, `double` 등에 대응하도록 미리 정의한다.

100개의 `int`가 아닌 하나의 블록으로 데이터를 보내려면 "연속 블록" 파생 데이터 타입을 정의해야 한다.

```c

MPI_Datatype newtype;

MPI_Type_contiguous(100, MPI_INT, &newtype);

MPI_Type_commit(&newtype);

MPI_Gather(array, 1, newtype, receive_array, 1, newtype, root, comm);

```

`MPI_Type_contiguous` 함수는 기존 데이터 타입의 연속적인 복사본으로 구성된 새로운 데이터 타입을 생성한다.

클래스 또는 데이터 구조를 전달하기 위해 `MPI_Type_create_struct`는 `MPI_predefined` 데이터 유형에서 MPI 파생 데이터 유형을 생성한다.

```c

int MPI_Type_create_struct(int count,

int *blocklen,

MPI_Aint *disp,

MPI_Datatype *type,

MPI_Datatype *newtype)

```

여기서:

  • `count`는 블록 수이며, `blocklen`, `disp` 및 `type` 배열의 길이(요소 단위)를 지정한다.
  • `blocklen`은 각 블록의 요소 수를 포함한다.
  • `disp`는 각 블록의 바이트 변위를 포함한다.
  • `type`은 각 블록의 요소 유형을 포함한다.
  • `newtype`(출력)는 이 함수에서 생성된 새로운 파생 유형을 포함한다.


`disp` (변위) 배열은 컴파일러가 클래스 또는 데이터 구조의 변수를 패딩할 수 있으므로 데이터 구조 정렬에 필요하다. 다른 필드 간의 거리를 찾는 가장 안전한 방법은 메모리에서 해당 주소를 얻는 것이다. 이는 C의 `&` 연산자와 동일한 `MPI_Get_address`를 사용하여 수행되지만, 메모리 세분화를 처리할 때는 그렇지 않을 수 있다.[18]

데이터 구조를 한 번에 하나의 항목씩 전달하는 것보다 하나의 블록으로 전달하는 것이 훨씬 빠르다. 특히 작업이 반복될 경우 더욱 그렇다. 이는 고정 크기 블록은 전송 중에 직렬화가 필요하지 않기 때문이다.[19]

3. 5. MPI-2의 추가 개념

MPI-2는 MPI-1의 기능을 확장하여 다음과 같은 새로운 개념들을 포함한다.

  • 단방향 통신 (One-sided communication):
  • `MPI_Put`, `MPI_Get`, `MPI_Accumulate` 함수를 사용하여 원격 메모리에 직접 접근한다.
  • 이는 한 프로세스가 다른 프로세스의 메모리 영역에 직접 쓰거나(Put), 읽거나(Get), 누적 연산(Accumulate)을 수행하는 방식이다.
  • 동기화가 불편하거나, 다른 프로세서가 데이터를 처리하는 동안 작업 부하를 분산하는 알고리즘에 유용하다. 예를 들어, 분산 행렬 곱셈에 활용될 수 있다.
  • 이러한 통신을 동기화하기 위해 전역, 쌍방향, 원격 잠금 방식이 사용된다.

  • 동적 프로세스 관리 (Dynamic process management):
  • `MPI_Comm_spawn`, `MPI_Comm_accept`, `MPI_Comm_connect`, `MPI_Comm_join` 함수를 사용하여 실행 중에 프로세스를 추가하거나 제거한다.
  • `MPI_Comm_spawn`은 지정된 MPI 프로세스의 여러 인스턴스를 생성하며, 새로 생성된 프로세스들은 새로운 `MPI_COMM_WORLD` 내부 통신자를 형성한다.
  • `MPI_Comm_spawn_multiple`은 다른 인스턴스가 다른 인수를 가진 다른 바이너리 파일이 되도록 허용하는 인터페이스다.[20]

  • 병렬 I/O (Parallel I/O):
  • MPI-IO라고도 불리며, 분산 파일 시스템 환경에서 효율적인 입출력을 지원한다.
  • 분산 시스템에서 I/O 관리를 MPI로 추상화하고, 기존의 파생 데이터 유형 기능을 사용하여 파일에 패턴화된 방식으로 쉽게 접근할 수 있도록 설계된 함수들을 제공한다.
  • 집단 I/O(Collective I/O) 개념은 프로세스가 작고 불연속적인 I/O 작업을 크고 연속적인 작업으로 집단적으로 변환하여 잠금 및 디스크 탐색 오버헤드를 줄임으로써 I/O 대역폭을 향상시킨다.[23]
  • MPI-IO는 HDF5 및 병렬 NetCDF와 같은 I/O 라이브러리의 기본 I/O 계층이 되었다.[24][25][26]


MPI-2는 500개 이상의 함수를 가지며, C, C++, Fortran 90에 대한 언어 바인딩을 제공한다. 객체 상호 운용성도 추가되어 혼합 언어 메시지 전달 프로그래밍을 더 쉽게 만들었다.

4. MPI 구현체 및 언어 바인딩

MPI는 다양한 구현체와 프로그래밍 언어 바인딩을 제공하여 폭넓게 활용된다.

MPI 표준은 C, C++, 포트란 언어에 대한 공식 바인딩을 제공한다.[27] 이 외에도 Perl, 파이썬, R, Ruby, 자바, CL 등 다양한 프로그래밍 언어에서 MPI를 사용할 수 있도록 비공식 바인딩 라이브러리들이 개발되었다.[27] 이러한 바인딩은 주로 MPICH나 Open MPI 같은 기존 MPI 구현을 래핑하여 MPI 지원을 다른 언어로 확장한다.

자바는 공식 MPI 바인딩이 없지만, mpiJava API[32]와 MPJ API[33] 등 여러 비공식 바인딩이 있다. 그러나 자바는 명시적 데이터 포인터가 없고 객체에 대한 선형 메모리 주소 공간이 없어 다차원 배열 및 복잡한 객체 전송이 비효율적이라는 어려움이 있다.

줄리아,[35] MATLAB, OCaml,[36] PARI/GP, 파이썬,[39] R[44] 등 다른 언어들을 위한 MPI 래퍼들도 개발되어 활발히 사용되거나 유지보수되고 있다.

4. 1. 주요 MPI 구현체


  • MPICH: 아르곤 국립 연구소(ANL)와 미시시피 주립 대학교가 개발한 초기 MPI 구현체이다.[27] IBM도 초기 구현에 참여했으며, 1990년대 초 대부분의 슈퍼컴퓨터 회사는 MPICH를 상용화하거나 자체 구현을 구축했다. 아르곤 국립 연구소는 지속적으로 MPICH를 개발하여 현재 MPI-4 표준을 지원한다.
  • Open MPI: FT-MPI, LA-MPI, LAM/MPI, PACX-MPI 등 여러 프로젝트가 통합된 오픈 소스 구현체이다.[27] 많은 TOP-500 슈퍼컴퓨터에서 사용된다. Open MPI는 주로 다음 3가지 프로젝트의 기술을 통합하였다.
  • 테네시 대학교의 FT-MPI
  • 로스 알라모스 국립 연구소의 LA-MPI
  • 인디애나 대학교 블루밍턴의 LAM/MPI
  • LAM/MPI: 오하이오 슈퍼컴퓨터 센터의 초기 오픈 소스 구현이다. 이후 Open MPI 프로젝트에 통합되었다.
  • [http://software.intel.com/en-us/intel-mpi-library/ Intel MPI Library]: 인텔에서 개발한 상용 MPI 구현체로, MPICH2를 기반으로 하며 인텔 프로세서에 최적화되어 있다.
  • [http://www.microsoft.com/japan/technet/WindowsServer/library/4cb68e33-024b-4677-af36-28a1ebe9368f.mspx MS MPI]: 마이크로소프트에서 개발한 MPI 구현체로, Windows HPC Server 환경을 지원한다.
  • [http://mvapich.cse.ohio-state.edu/ MVAPICH]

4. 2. 언어 바인딩

MPI 표준은 C, C++, Fortran 언어에 대한 공식 바인딩을 제공한다.[27] Perl, Python, R, Ruby, Java, CL 등 다양한 프로그래밍 언어에서도 MPI를 사용할 수 있도록 비공식적인 바인딩 라이브러리들이 개발되었다.[27] 이러한 바인딩은 보통 MPICH 또는 Open MPI와 같은 기존 MPI 구현을 래핑하는 방식으로 MPI 지원을 다른 언어로 확장한다.

자바는 공식 MPI 바인딩이 없지만, mpiJava API[32]와 MPJ API[33] 등 여러 비공식 바인딩이 존재한다. 자바는 명시적인 데이터 포인터가 없고 객체에 대한 선형 메모리 주소 공간이 없기 때문에 다차원 배열 및 복잡한 객체 전송이 비효율적이라는 어려움이 있다.

줄리아,[35] MATLAB, OCaml,[36] PARI/GP, 파이썬,[39] R[44] 등 다른 언어들을 위한 MPI 래퍼들도 개발되어 활발히 사용되거나 유지보수되고 있다.

참조

[1] 웹사이트 Message Passing Interface :: High Performance Computing https://hpc.nmsu.edu[...] 2022-08-06
[2] 간행물 Standards for message-passing in a distributed memory environment https://technicalrep[...] 1992-08
[3] 컨퍼런스 MPI: A Message Passing Interface ACM 1993-11-15
[4] 서적 Introduction to HPC with MPI for Data Science https://franknielsen[...] Springer
[5] 문서
[6] 서적 Proceedings of the 2006 ACM/IEEE conference on Supercomputing - SC '06 ACM 2017-08-04
[7] 문서 KNEM: High-Performance Intra-Node MPI Communication http://knem.gforge.i[...]
[8] 웹사이트 FAQ: Tuning the run-time characteristics of MPI sm communications https://www.open-mpi[...]
[9] 문서 The MPI-3 standard introduces another approach to hybrid programming that uses the new MPI Shared Memory (SHM) model https://software.int[...]
[10] 문서 Shared Memory and MPI 3.0 http://insidehpc.com[...]
[11] 문서 Using MPI-3 Shared Memory As a Multicore Programming System http://www.caam.rice[...]
[12] 문서 Table of Contents — September 1994, 8 (3-4) http://hpc.sagepub.c[...] Hpc.sagepub.com 2014-03-24
[13] 문서 MPI Documents http://www.mpi-forum[...] Mpi-forum.org 2014-03-24
[14] 문서
[15] 문서 MPI: A Message-Passing Interface Standard Version 3.1, Message Passing Interface Forum, June 4, 2015 http://www.mpi-forum[...] http://www.mpi-forum.org 2015-06-16
[16] 웹사이트 Type matching rules http://mpi-forum.org[...]
[17] 웹사이트 MPI_Gather(3) man page (version 1.8.8) https://www.open-mpi[...]
[18] 웹사이트 MPI_Get_address http://www.mpich.org[...]
[19] 문서 Boost.MPI Skeleton/Content Mechanism rationale http://www.boost.org[...]
[20] 문서
[21] 문서
[22] 웹사이트 Sparse matrix-vector multiplications using the MPI I/O library http://marcovan.hult[...]
[23] 웹사이트 Data Sieving and Collective I/O in ROMIO http://www.mcs.anl.g[...] IEEE 1999-02
[24] 서적 2011 IEEE International Parallel & Distributed Processing Symposium IEEE 2011-09
[25] 간행물 Enhance parallel input/output with cross-bundle aggregation 2016
[26] 서적 2014 International Workshop on Data Intensive Scalable Computing Systems IEEE 2014-11
[27] 웹사이트 cea-hpc/wi4mpi: Wrapper interface for MPI https://github.com/c[...]
[28] 문서 mpicc http://www.mpich.org[...] Mpich.org 2014-03-24
[29] 문서 Pure Mpi.NET http://www.purempi.n[...]
[30] 웹사이트 MPI.NET: High-Performance C# Library for Message Passing http://www.osl.iu.ed[...]
[31] 웹사이트 mpiJava Home Page http://www.hpjava.or[...]
[32] 웹사이트 Introduction to the mpiJava API http://www.hpjava.or[...]
[33] 웹사이트 The MPJ API Specification http://www.hpjava.or[...]
[34] 웹사이트 MPJ Express Project http://mpj-express.o[...]
[35] 문서 JuliaParallel/MPI.jl https://github.com/J[...] Parallel Julia 2019-10-03
[36] 웹사이트 Xavier Leroy - Software http://cristal.inria[...]
[37] 뉴스 Archives of the Caml mailing list > Message from Yaron M. Minsky http://caml.inria.fr[...] Caml.inria.fr 2003-07-15
[38] 웹사이트 Introduction to parallel GP https://pari.math.u-[...]
[39] 웹사이트 mpi4py https://mpi4py.readt[...]
[40] 웹사이트 numba-mpi https://pypi.org/p/n[...]
[41] 웹사이트 mpi4jax https://mpi4jax.read[...]
[42] 웹사이트 Google Code Archive - Long-term storage for Google Code Project Hosting. https://code.google.[...]
[43] 웹사이트 Pydusa http://sourceforge.n[...]
[44] 간행물 Rmpi: Parallel Statistical Computing in R https://cran.r-proje[...]
[45] 웹사이트 pbdMPI: Programming with Big Data -- Interface to MPI https://cran.r-proje[...]
[46] 문서 The output snippet was produced on an ordinary Linux desktop system with Open MPI installed. [[Linux distribution|Distro]]s usually place the mpicc command into an openmpi-devel or libopenmpi-dev package, and sometimes make it necessary to run "module add mpi/openmpi-x86_64" or similar before mpicc and mpiexec are available.
[47] 문서 https://www.mpi-foru[...]
[48] 문서 https://www.mpi-foru[...]
[49] 문서 https://www.mpi-foru[...]
[50] 문서 https://www.mpi-foru[...]
[51] 웹사이트 HPC is dying, and MPI is killing it https://www.dursi.ca[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com